package com.sjc.designpattern.builder;

/**
 * @Classname WithoutBuilderPatternDemo
 * @Description 不使用构造器模式
 * @Date 2020/4/25 16:37
 * @Created by SangJiacun
 */
public class WithoutBuilderPatternDemo {
    public static void main(String[] args) {
        // 构造这个复杂的product对象
        Product product = new Product();

        // 设置field1属性
        System.out.println("在设置field1之前进行复杂的校验逻辑");
        product.setField1("值1");

        // 设置field2属性
        System.out.println("在设置field2之前进行复杂的数据格式转化逻辑");
        product.setField1("值1");

        // 设置field3属性
        System.out.println("在设置field3之前进行复杂的数据处理逻辑，跟其他对象的数据进行关联");
        product.setField1("值1");

        // 上面是简化的一个逻辑，实际上对于一些有几十个字段、甚至是上百个字段的复杂对象的构建，上面代码会极度膨胀，非常复杂。
        // 1. 大量代码堆积在一起，维护性非常差，可读性非常差，一坨代码，跟屎一样，读不懂，没法改
        // 2. 这段逻辑，如果在多个地方都有使用的话，一旦这段逻辑出现了一些变化，可能需要在多个地方修改这一大坨跟屎一样的代码
        // 把不同的构造的步骤，抽取成某一个方法
    }

    public static class Product {
        private String field1;
        private String field2;
        private String field3;

        public String getField1() {
            return field1;
        }

        public void setField1(String field1) {
            this.field1 = field1;
        }

        public String getField2() {
            return field2;
        }

        public void setField2(String field2) {
            this.field2 = field2;
        }

        public String getField3() {
            return field3;
        }

        public void setField3(String field3) {
            this.field3 = field3;
        }
    }
}
